home *** CD-ROM | disk | FTP | other *** search
- Uses CRT;
- var
- S : string;
-
- function Wrap(var st: string; maxlen: byte; justify: boolean): string;
- { returns a string of no more than maxlen characters with the last }
- { character being the last space before maxlen. On return st now has }
- { the remaining characters left after the wrapping. }
- const
- space = #32;
- var
- len : byte absolute st;
- x,
- oldlen,
- newlen : byte;
-
- function JustifiedStr(s: string; max: byte): string;
-
- { Justifies string s left and right to length max. If there is more }
- { than one trailing space, only the right most space is deleted. The}
- { remaining spaces are considered "hard". #255 is used as the char }
- { used for padding purposes. This will enable easy removal in any }
- { editor routine. }
-
- const
- softSpace = #255;
- var
- jstr : string;
- len : byte absolute jstr;
- begin
- jstr := s;
- while (jstr[1] = space) and (len > 0) do { delete all leading spaces }
- delete(jstr,1,1);
- if jstr[len] = space then
- dec(len); { Get rid of trailing space }
- if not ((len = max) or (len = 0)) then begin
- x := pos('.',jstr); { Attempt to start padding at sentence break }
- if (x = 0) or (x =len) then { no period or period is at length }
- x := 1; { so start at beginning }
- if pos(space,jstr) <> 0 then repeat { ensure at least 1 space }
- if jstr[x] = space then { so add a soft space }
- insert(softSpace,jstr,x+1);
- x := succ(x mod len); { if eoln is reached return and do it again }
- until len = max; { until the wanted string length is achieved }
- end; { if not ... }
- JustifiedStr := jstr;
- end; { JustifiedStr }
-
-
- begin { Wrap }
- if len <= maxlen then begin { no wrapping required }
- Wrap := st;
- len := 0;
- end else begin
- oldlen := len; { save the length of the original string }
- len := succ(maxlen); { set length to maximum }
- repeat { find last space in st before or at maxlen }
- dec(len);
- until (st[len] = space) or (len = 0);
- if len = 0 then { no spaces in st, so chop at maxlen }
- len := maxlen;
- if justify then
- Wrap := JustifiedStr(st,maxlen)
- else
- Wrap := st;
- newlen := len; { save the length of the newly wrapped string }
- len := oldlen; { and restore it to original length before }
- Delete(st,1,newlen); { getting rid of the wrapped portion }
- end;
- end; { Wrap }
-
- begin
- S :=
- 'By far the easiest way to manage a database is to create an '+
- 'index file. An index file can take many forms and its size will depend '+
- 'upon how many records you want in the db. The routines that follow '+
- 'assume no more than 32760 records.';
-
- while length(S) <> 0 do
- writeln(Wrap(S,75,true));
- Readkey;
- end.
-
- Whilst this is tested and known to work on the example string, no further
- testing than that has been done. I suggest you test it a great deal more
- before being satisfied that it is OK.
-